export function objectToFormData(
    obj: Record<string, any>,    // 输入对象
    form?: FormData,             // 可选的 FormData 实例
    namespace?: string           // 可选的命名空间
): FormData {                   // 返回一个 FormData 实例
    const fd = form || new FormData();  // 如果没有传入 form 参数，则创建一个新的 FormData
    let formKey: string;

    for (const property in obj) {
        if (Object.prototype.hasOwnProperty.call(obj, property)) {
            // 确定当前属性的键
            const key = Array.isArray(obj) ? "[]" : `[${property}]`;

            // 如果传入了命名空间，将其与当前键合并
            if (namespace) {
                formKey = `${namespace}${key}`;
            } else {
                formKey = property;
            }

            // 如果属性值是对象且不是 File，则递归调用 objectToFormData
            if (
                typeof obj[property] === "object" &&
                !(obj[property] instanceof File)
            ) {
                objectToFormData(obj[property], fd, formKey);
            } else {
                // 如果属性值是字符串或 File，则将其添加到 FormData 中
                fd.append(formKey, obj[property]);
            }
        }
    }
    return fd;
}